﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using YookingBizYQ.Class.Public;
using YookingDBNormal.Class;
using YookingKitBox.Class.Public;
using YookingSvrDBCall.Class.DBLogic;
using YookingSvrDBCall.Class.DBPub;

namespace YookingBizYQ.Class.Dome
{
    class clsDemo
    {
        //注释：彭帅 2020年02月04日===================================================
        //查询指定身份证号码的照片图像信息
        public string GetSFZPhoto(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strDBGroup = "Data";   //主表数据库分组名
            string strDBTblName = "Test"; //主表库名称
            string strRecordID = "00000"; //主表记录ID
            string strSFZH = "000000000"; //指定人员的身份证号码

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 4)
            {
                strDBGroup = strArray[0];
                strDBTblName = strArray[1];
                strRecordID = strArray[2];
                strSFZH = strArray[3];
            }

            #endregion

            #region 生成查询记录的SQL语句

            StringBuilder sbQuerySQL = new StringBuilder();
            sbQuerySQL.AppendLine(" SELECT ");
            sbQuerySQL.AppendLine(" 	IMAGEENTITY ");
            sbQuerySQL.AppendLine(" FROM ");
            sbQuerySQL.AppendLine(" 	MDA_PUBLICIMAGE ");
            sbQuerySQL.AppendLine(" WHERE ");
            sbQuerySQL.AppendLine(" 	" + clsSQLSyntax.IsNullSQL("Data", "SYS_CANCELDATETIME"));
            sbQuerySQL.AppendLine(" AND upper(MAINTABLEDEFINEID) = '" + strDBTblName.ToUpper() + "' ");
            sbQuerySQL.AppendLine(" AND MAINTABLERECORDID = '" + strRecordID + "' ");
            sbQuerySQL.AppendLine(" AND SPECIALRELATENUMBER = '" + strSFZH + "' ");

            #endregion

            clsDbSQLLogic myDB = new clsDbSQLLogic(); //实例化数据库操作类
            strRtData = myDB.YookingExecuteJson("Data", sbQuerySQL.ToString());

            return strRtData; //数据库查询结果
        }

        //注释：彭帅 2020年02月04日=================================================================================
        /// <summary>
        /// 解析和处理客户端发过来的要求服务器必须处理的数据，
        /// 先解密、再解码、再解析出一个一个的参数，最后执行写库操作。
        /// </summary>
        /// <param name="strB64RequestData">
        /// 包含五个参数的数据集合，参数分别为：
        /// 【strDBGroup：数据库分组名】
        /// 【strDBTblName：库表名称】
        /// 【strKeyColSet：需要判断是否重值的字段名，支持可以多个字段】
        /// 【strUserName：客户端用户名】
        /// 【strJsonArray：将要向数据库中写入的真实数据内容】
        /// </param>
        /// <returns>返回最终insert或update的写库结果</returns>
        public string InsertOrUpdate_ToDB(string strB64RequestData)
        {
            string strRtData = "no data"; //最终的写库结果

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strDBGroup = "Data";         //数据库分组名
            string strDBTblName = "TableAA";    //库表名称
            string strKeyColSet = "aa,bb,cc";   //需要判断是否重值的字段名，支持可以多个字段
            string strUserName = "02120119901"; //客户端用户名
            string strJsonArray = "[{null}]";   //将要向数据库中写入的真实数据内容

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 5)
            {
                strDBGroup = strArray[0];
                strDBTblName = strArray[1];
                strKeyColSet = strArray[2];
                strUserName = strArray[3];
                strJsonArray = strArray[4];
            }

            #endregion

            DataSet dsData = clsJConvert.JArryToDataSet(strJsonArray); //将Json数组转成DataSet

            clsWriteDB myWrite = new clsWriteDB(); //先判断数据是否存在，根据判断结果自动执行insert或者update
            strRtData = myWrite.WriteDBNormal_UseSYSCol(strDBGroup, strDBTblName, strKeyColSet, strUserName, dsData);

            return strRtData; //数据库操作的最终结果
        }

        //注释：彭帅 2020年02月04日=======================================================
        /// <summary>
        /// 删除指定指定数据库表中指定Sys_RecordID的记录
        /// </summary>
        /// <param name="strB64RequestData">客户端传过来的BASE64格式的请求数据参数</param>
        /// <returns>返回数据库操作的结果，注销操作受影响的行数</returns>
        public string CancelDataForRecordID(string strB64RequestData)
        {
            object objResult = 0; //受影响的行数

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strDBGroup = "Data";   //数据库分组名
            string strDBTblName = "Test"; //库表名称
            string strCancelUserName = "02120119901"; //注销操作者
            string strCancelDateTime = "1900-01-01 00:00:00"; //注销日期时间值
            string strCancelReason = "未说明"; //注销原因
            string strRecordID = "0000000000"; //待注销的记录ID

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 6)
            {
                strDBGroup = strArray[0];
                strDBTblName = strArray[1];
                strCancelUserName = strArray[2];
                strCancelDateTime = strArray[3];
                strCancelReason = strArray[4];
                strRecordID = strArray[5];
            }

            #endregion

            #region 生成查询记录的SQL语句

            StringBuilder sbUpdateSQL = new StringBuilder();
            sbUpdateSQL.AppendLine(" UPDATE " + strDBTblName + " SET ");
            sbUpdateSQL.AppendLine("  SYS_CANCELUSERNAME='" + strCancelUserName + "', ");
            sbUpdateSQL.AppendLine("  SYS_CANCELDATETIME='" + strCancelDateTime + "', ");
            sbUpdateSQL.AppendLine("  SYS_CANCELREASON='" + strCancelReason + "' ");
            sbUpdateSQL.AppendLine(" WHERE ");
            sbUpdateSQL.AppendLine("  SYS_RECORDID='" + strRecordID + "' ");

            #endregion

            clsDbSQLLogic myDB = new clsDbSQLLogic(); //实例化数据库操作类
            objResult = myDB.YookingExecuteNonQuery(strDBGroup, sbUpdateSQL.ToString());

            return objResult.ToString(); //返回数据库操作的结果
        }
    }
}
